/*
 * p253.cpp
 *
 *  Created on: 2013-6-4
 *      Author: zy
 */

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 10000 + 5;
double my_sqrt(double d)
{
	return sqrt(max(d, 0.0));
}
double my_acos(double d)
{
	return acos(d < -1 ? -1 : d > 1 ? 1 : d);
}
#define sqr(v) ((v)*(v))
int sig(double d)
{
	return fabs(d) < 1E-10 ? 0 : d < 0 ? -1 : 1;
}
struct Point
{
	double x, y;
	Point(double x, double y) :
		x(x), y(y)
	{
	}
	Point()
	{
	}
	Point operator -(const Point & p) const
	{
		return Point(x - p.x, y - p.y);
	}
	Point operator +(const Point & p) const
	{
		return Point(x + p.x, y + p.y);
	}
	Point operator *(double d) const
	{
		return Point(x * d, y * d);
	}
	bool operator ==(const Point & p) const
	{
		return sig(x - p.x) == 0 && sig(y - p.y) == 0;
	}
	bool operator <(const Point & p) const
	{
		return sig(x - p.x) != 0 ? x < p.x : sig(y - p.y) < 0;
	}
	Point resize(double d)
	{
		d /= my_sqrt(sqr(x) + sqr(y));
		return Point(x * d, y * d);
	}
	Point left90()
	{
		return Point(-y, x);
	}
	Point rotate(double radian)
	{ //逆时针转
		double c = cos(radian), s = sin(radian);
		return Point(x * c - y * s, y * c + x * s);
	}
	double mod()
	{
		return my_sqrt(sqr(x) + sqr(y));
	}
	void output()
	{
		printf("x = %.2f, y = %.2f\n", x, y);
	}
};
Point ps[maxn];
double ang[maxn];
int n;
double dot(Point &o, Point &a, Point &b)
{
	return (a.x - o.x) * (b.x - o.x) + (a.y - o.y) * (b.y - o.y);
}
double cross(Point o, Point a, Point b)
{
	return (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y);
}
bool onSeg(Point p, Point a, Point b)
{
	return sig(cross(p, a, b)) == 0 && sig(dot(p, a, b)) <= 0;
}
double area(Point * p, int n)
{
	double res = 0;
	p[n] = p[0];
	for (int i = 0; i < n; i++)
	{
		res += p[i].x * p[i + 1].y - p[i + 1].x * p[i].y;
	}
	return res / 2;
}
void init()
{
	if (area(ps, n) < 0)
		reverse(ps, ps + n);
	rotate(ps, min_element(ps, ps + n), ps + n);
	for (int i = 1; i < n; i++)
	{
		ang[i] = atan2(ps[i].y - ps[0].y, ps[i].x - ps[0].x);
	}
	ang[0] = -M_PI / 2;
}
bool dcmp(double a, double b)
{
	return sig(a - b) < 0;
}
//0 外 2 内 壹 边上
int judge(Point p)
{
	if (onSeg(p, ps[0], ps[1]) || onSeg(p, ps[0], ps[n - 1]))
		return 1;
	int idx = lower_bound(ang, ang + n, atan2(p.y - ps[0].y, p.x - ps[0].x),
			dcmp) - ang;
	if (idx <= 1 || idx == n)
		return 0; //外面！
	return 1 + sig(cross(ps[idx - 1], ps[idx], p));
}

int main()
{
	int m, k;
	while (scanf("%d%d%d", &n, &m, &k) != EOF)
	{
		for (int i = 0; i < n; i++)
			scanf("%lf%lf", &ps[i].x, &ps[i].y);
		init();
		int sum = 0;
		Point p;
		while (m--)
		{
			scanf("%lf%lf", &p.x, &p.y);
			if (judge(p))
				sum++;
		}
		if (sum >= k)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}
